perm filename HHTERM.FAI[CMS,LCS]1 blob sn#324392 filedate 1977-12-23 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		.INSERT	ASMBL.FAI[CMS,LCS]
C00003 00003	 Reset
C00005 00004	 REFRESH LOOP
C00007 00005	 WAIT LOOP AND SETUP
C00009 00006	 RS232 INTERUPT ROUTINE	(RAM JUMP?)
C00010 00007	 RS232 CONTROL
C00012 00008	 KB INTERUPT ROUTINE (VECTOR TO RAM JUMP?)
C00014 00009	 ASCII TABLE	(KBD)
C00015 ENDMK
C⊗;
	.INSERT	ASMBL.FAI[CMS,LCS]

	CPL ← = 28	;CHRS PER LINE
	NCHRS ← = 112	;CHRS PER SCREEN
	
; Zpage ram
	COL:	0
	CUR:	0
		0
	WINDOW:	0
		0

	LOC 500		;?
REBUF:	0		;ASCII CHR BUF

	LOC 2000
ABUF:	0		;REFRESH BUFFER

; Reset
	LOC 174000
	RSTA:	CLD		;CLEAR DECIMAL MODE
		LDXI	177	;STACK DEPTH
		TXS		;SETUP STACK
	;RESET RAM JUMPS?
	;RESET I/O BUT DON'T CLR SCREEN ON NMI?
; SETUP AND CLEAR SCREEN
	;CLEAR ABUF
		;CLEAR TO END OF LINE *32?

	SD ← 4		;START OF ABUF
		LDAI	0
		STAZ	CUR	;SETUP CURSOR
		STAZ	WINDOW	;SETUP WINDOW
		LDAI	SD
		STAZ	CUR+1
		STAZ	WINDOW+1

		JSR	UPDATE	;CLEAR REBUF

; INIT I/O
  ;INIT RS232
	SIODEF ← 225	;UART CONTROL WORD
	ACIAC ← ACIA	;UART CONTROL REG ADDRESS
	ACIAD ← ACIA+1	;UART DATA REG ADDRESS
		LDAI	3	;RESET ACIA
		STA	ACIAC
		LDAI	SIODEF	;SETUP DEFAULT I/O CONTROL
		STA	ACIAC

  ;INIT KB SCANER
	KBD ← KB
	KBC ← KB+1

		CLI		;?

; REFRESH LOOP
	NCHRS ← =112	;NUMBER OF CHRS ON SCREEN
	DPYSR ← 	;DISPLAY SHIFT REGISTER ADDRESS

		LDXI	NCHRS-1	;112 ∨ 128
	RELOOP:	LDAI	1
		STAZ	COL	;SETUP COL BIT 1

	SLOOP0:	LDAX	REBUF0	;PUT FIRST COL IN SHIFT
		STA	DPYSR	;REGISTER STARTING WITH LAST CHR
		DEX
		BPL	SLOOP0
		JSR	NXCOL	;TURN ON COL AND WAIT

	SLOOP1:	LDAX	REBUF1	;SECOND
		STA	DPYSR
		DEX
		BPL	SLOOP1
		JSR	NXCOL

	SLOOP2:	LDAX	REBUF2	;THIRD
		STA	DPYSR
		DEX
		BPL	SLOOP2
		JSR	NXCOL

	SLOOP3:	LDAX	REBUF3	;FORTH
		STA	DPYSR
		DEX
		BPL	SLOOP3
		JSR	NXCOL

	SLOOP4:	LDAX	REBUF4	;FIFTH
		STA	DPYSR
		DEX
		BPL	SLOOP4
		JSR	NXCOL

		JMP	RELOOP	;TIMER?

; WAIT LOOP AND SETUP
	COLREG ← 	;COL ENABLE REGISTER ADDRESS
	CPL ← = 28	;NUMBER OF CHRS PER LINE

	NXCOL:	LDAZ	COL
		STA	COLREG	;TURN ON COL

				;WAIT (BRIGHTNESS)

		ASLZ	COL	;SHIFT FOR NEXT COL
		LDXI	NCHRS-1	;112 ∨ 128

		LDAI	0
		STA	COLREG	;TURN OFF COL
		RTS

; CLEAR LINE
	CLRLIN:	LDYI	CPL-1	;# CHRS PER LINE
		LDAI	40	;<space>
	CLRL:	STAIY	CUR	;FILL CURSOR THRU CURSOR + 37
		DEY		;WITH SPACES
		BPL	CLRL
		RTS

; UPDATE SCREEN
	UPDATE:	LDYI	NCHRS-1	;112 ∨ 128
	UPLOP:	LDAIY	WINDOW	;GET CHR FROM ABUF
		TAX
		LDAX	CHRGEN0	;FILL REBUF COL BY COL
		STAY	REBUF0	;CHR BY CHR
		LDAX	CHRGEN1
		STAY	REBUF1
		LDAX	CHRGEN2
		STAY	REBUF2
		LDAX	CHRGEN3
		STAY	REBUF3
		LDAX	CHRGEN4
		STAY	REBUF4
		DEY
		BPL	UPLOP
		RTS

; RS232 INTERUPT ROUTINE	(RAM JUMP?)
	RSINT:	PHA		;SAVE REGS
		TXA
		PHA
		TYA
		PHA
		LDA	ACIAD	;GET CHR FROM ACIA

		CLI		;?
		CMPI	??	;
		BCC	SCNTRL
		CMPI	??	;
		BCS	SCNTRL

		LDXI	0
		STAIX	CUR	;STORE IN ABUF

	;CK IF IN WINDOW

		TAX
		LDYZ	CUR

		LDAX	CHRGEN0	;PUT CHRGEN COL BITS IN REBUF(CUR)
		STAY	REBUF0
		LDAX	CHRGEN1
		STAY	REBUF1
		LDAX	CHRGEN2
		STAY	REBUF2
		LDAX	CHRGEN3
		STAY	REBUF3
		LDAX	CHRGEN4
		STAY	REBUF4

		INCZ	CUR	;CUR←CUR+1
		BNE	2
		INCZ	CUR+1

	;CK FOR SCROLL

	RSRTRN:	PLA		;RESTORE REGS
		TAY
		PLA
		TAX
		PLA
		RTI		;RETURN

; RS232 CONTROL
	SCNTRL:	CMPI	15	;<cr>
		BEQ	RCR
		CMPI	177	;<bspace>
		BEQ	RBS
;		CMPI		;LOAD
		BEQ	LOAD
;		CMPI		;OTHER
		BNE	RSRTRN
	;OTHER RS CONTROL FUNCTIONS
		JMP	RSRTRN

; <cr>
	ED ← 	;END OF ABUF

	RCR:	LDAZ	CUR
		ORAI	37	;FOR ≤32 CHRS
		STAZ	CUR
		INCZ	CUR
		BNE	NOOV
		INCZ	CUR+1
		LDAZ	CUR+1
		CMPI	ED	;CK IF OFF END
		BNE	NOOV
		LDAI	SD	;START OVER
		STAZ	CUR+1
	NOOV:
;		JSR	CLRLIN
	;CK IF IN WINDOW THEN SCROLL
	;UPDATE? ∨ UPDATE LINE?
	;RETURN

; <bspace>
	RBS:	LDAZ	CUR
		BNE	NOC
		DECZ	CUR+1
		LDAZ	CUR+1
		CMPI	SD-1
		BNE	NOC
		LDAI	ED-1	;WRAP AROUND
	NOC:	DECZ	CUR
		LDAI	40	;<space>
		JSR	GENCHR
	;CK UPDATE
	;RETURN

; KB INTERUPT ROUTINE (VECTOR TO RAM JUMP?)
	KBCHR ← 	;KEYBOARD DATA REGISTER ADDRESS

	KBINT:	PHA		;SAVE REGS
		TXA
		PHA

		LDA	KBCHR	;GET CHR FROM KB
		CLI		;?

		CMPI	??	;
		BCC	KCNTRL
		CMPI	??	;
		BCS	KCNTRL

		TAX
		LDAX	ASCII	;CONVERT TO ASCCI
		JSR	ORSW	;OUTPUT TO RS232 WAIT

	KBRTRN:	PLA		;RESTORE REGS
		TAX
		PLA
		RTI		;RETURN

; KB CONTROL
;	KCNTRL:	CMPI		;SCROLL UP
		BEQ	SCRLU
;		CMPI		;SCROLL DOWN
		BEQ	SCRLD
;		CMPI		;BRIGHTNESS
		BEQ	BRIGHT
;		CMPI		;OTHER HALF OF LINES
		BEQ	OHALF
;		CMPI		;OTHER
		BNE	KBRTRN
	;EXTRA KB CONTROL FUNCTIONS
		JMP	KBRTRN

; SCROLL DOWN
	SCRLD:	LDAZ	WINDOW
		CLC
		ADCI	40	;FOR ≤32 CHRS
		STAZ	WINDOW
		BCC	NOWA
		INCZ	WINDOW+1
		LDAZ	WINDOW+1
		CMPI	ED
		BNE	NOWA
		LDAI	SD
		STAZ	WINDOW+1
	NOWA:	
	;CK UPDATE?
	;RETURN

; SCROLL UP
	SCRLU:	LDAZ	WINDOW
		SEC
		SBCI	40	;≤32 CHRS PER LINE
		STAZ	WINDOW
		BCS	NOUN
		DECZ	WINDOW+1
		LDAZ	WINDOW+1
		CMPI	SD-1
		BNE	NOUN
		LDAI	ED-1
		STAZ	WINDOW+1
	NOUN:
	;UPDATE
	;RETURN

; WAIT UNTIL RS232 ← CHR
	ORSW:	PHA		;SAVE CHR
	WAIT:	LDA	ACIAC
		ANDI	2	;CHECK IF FULL
		BEQ	WAIT
		PLA
		STA	ACIAD	;OUTPUT IT
		RTS

; ASCII TABLE	(KBD)
;		  3B  7B
; CHRGEN	(COL,CHR)

; INTER VECTS
	LOC 200265
;	LOC 177772

	0

	NMIV:	5
		2
	RSTV:	30
		374
	IRQV:	0
		2

;	NMIV:	ABSO RSINT	;			2
;	RSTV:	ABSO RSTA	;			2
;	IRQV:	ABSO KBINT	;		       _2_
				;			6
	END